package com.elvish.quickpoi.util;

import com.elvish.quickpoi.entity.Order;
import org.nutz.integration.json4excel.J4E;
import org.nutz.integration.json4excel.J4EColumn;
import org.nutz.integration.json4excel.J4EConf;
import org.nutz.lang.Files;
import org.nutz.lang.Lang;
import org.nutz.lang.util.Disks;
import org.nutz.log.Log;
import org.nutz.log.Logs;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * as you see ...
 *
 * @author Elvish
 * @email 464773234@qq.com
 */
public class PoiUtils {

    private  static  final Log LOGGER = Logs.get();

    /**
     * 导出excel
     * @param dataList 数据集合
     * @param file 导出文件
     * @param <T> 数据类型
     */
    public static <T> void toExcel(List<T> dataList,String file){
        try {
            J4E.toExcel(Files.createFileIfNoExists(file),dataList,null);
        } catch (IOException e) {
            LOGGER.error("导出异常",e);
        }
    }

    /**
     * 动态设置字段导出excel
     * @param columns 导出字段集合
     * @param dataList 数据集合
     * @param file 导出文件
     * @param <T> 数据类型
     */
    public static <T> void toExcel(List<String> columns,List<T> dataList,String file){
        if(!Lang.isEmpty(dataList)){
            try {
                Class clz = dataList.get(0).getClass();
                J4EConf j4c = J4EConf.from(clz);
                for (J4EColumn column : j4c.getColumns()){
                    for (String columnName : columns){
                        if(columnName.equals(column.getFieldName())){
                            // 设置忽略导出`
                            column.setIgnore(true);
                            break;
                        }
                    }
                }
                J4E.toExcel(Files.createFileIfNoExists(file),dataList,j4c);
            } catch (IOException e) {
                LOGGER.error("导出异常",e);
            }
        }
    }

    /**
     * 解析excel数据，转换为数据集合
     * 注意：这里不会直接将数据插入DB，需要额外操作
     * @param file 文件
     * @param clz 数据类型
     * @return 数据集合
     */
    public static <T> List<T> fromExcel(String file,Class<T> clz){
        InputStream in = Files.findFileAsStream(Disks.absolute(file));
        return J4E.fromExcel(in,clz,null);
    }


}
